package org.csu.pet_store_2.persistence;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.csu.pet_store_2.Domain.Cart;
import org.csu.pet_store_2.Domain.Signon;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface CartMapper extends BaseMapper<Cart> {

    default boolean isCartItemExist(String userid, String itemId) {
        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userid", userid);
        queryWrapper.eq("itemid", itemId);
        return this.exists(queryWrapper);
    }

    default List<Cart> getCartItemByUserid(@Param("userid") String userid) {
        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userid", userid);
        return this.selectList(queryWrapper);
    }

    default int setCartItemByUserid(@Param("userid") String userid, String itemId, int qty) {
        Cart cartItem = new Cart();
        cartItem.setQuantity(qty);
        if (itemId != null && userid != null) {
            UpdateWrapper<Cart> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("userid", userid);
            updateWrapper.eq("itemid", itemId);
            return this.update(cartItem, updateWrapper);
        }
        return 0;
    }

    default int setNewCartItem(@Param("userid") String userid, String itemId, int qty) {
        if (this.isCartItemExist(userid, itemId)) {
            return this.setCartItemByUserid(userid, itemId, qty);
        }
        Cart cart = new Cart();
        cart.setUserId(userid);
        cart.setItemId(itemId);
        cart.setQuantity(qty);
        return this.insert(cart);
    }

}
